﻿using ConfExpert.Datasets;
using ConfExpert.Datasets.MyDataTableAdapters;
using ConfExpert.Forms.Base;
using ConfExpert.Forms.Depo;
using ConfExpert.Forms.Rapor;
using ConfExpert.Utility;
using ConfExpert.Utility.Peripheral;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.BandedGrid;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraReports.UI;
using DevExpress.XtraTab;
using DevExpress.XtraVerticalGrid.Events;
using DevExpress.XtraVerticalGrid.Rows;
using DevTeam;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace ConfExpert.Forms.SatinAlma.YeniYapi
{
    public partial class PO : XForm
    {
        #region Constructors & Members

        int poId = 0;
        public int POId
        {
            get { return poId; }
            set
            {
                poId = value;

                txtInfo.Caption = "";
                if (poId > 0)
                    txtInfo.Caption = "PO." + poId.ToString();
            }
        }

        int lastPOId = 0;

        RepositoryItemImageComboBox imageCombo = new RepositoryItemImageComboBox();
        RepositoryItemHyperLinkEdit riHyperLink = new RepositoryItemHyperLinkEdit();

        BindingSource bsPO;
        BindingSource bsPOLines;
        BindingSource bsAyrimlar;
        BindingSource bsPOSip;
        BindingSource bsFoy;

        public static RepositoryItemCheckedComboBoxEdit riIstekler
        {
            get
            {
                RepositoryItemCheckedComboBoxEdit ri = new RepositoryItemCheckedComboBoxEdit();
                ri.TextEditStyle = TextEditStyles.DisableTextEditor;
                ri.Items.AddRange(new object[] { "CAD", "H/L", "ANALİZ", "FİYAT TEKLİFİ" });
                return ri;
            }
        }

        public static RepositoryItemComboBox riYikama
        {
            get
            {
                RepositoryItemComboBox ri = new RepositoryItemComboBox();
                ri.TextEditStyle = TextEditStyles.DisableTextEditor;
                ri.Items.AddRange(new object[] { DBNull.Value,
                    "Rins Yıkama(30° , 60°)",
                    "Normal Yumuşatıcılı (35° , 60°)",
                    "Silikon Yıkama (40°, 60°)",
                    "Enzim (45°, 60°)",
                    "Kot 3 No (45°, 60°)",
                    "İndigo Yıkama (45°, 60°)",
                    "Top Yıkama (70°, 60°)",
                    "Kreş Yıkama (60°, 60°)",
                    "Reaktif Parça Boya 8 Saat (85°, 70°)",
                    "Antik Parça Boya 10 Saat (85°, 70°)",
                    "Pigment Parça Boya 12 Saat (85°, 70°)",
                    "Yağlı Boya (Soğukta Boyama, 110°)",
                    "Taş Enzim 45 Dakika + Silikon",
                    "Akar Boya",
                    "Ağır Yıkama",
                    "Normal ev yıkama(40°, 60°)",
                    "Light Yıkama",
                    "Medium Yıkama",
                    "Dark Yıkama",
                    "Normal Yumuşatıcılı 15 Dakika (30°)"
                        });
                return ri;
            }
        }

        public static RepositoryItemComboBox riUtu
        {
            get
            {
                RepositoryItemComboBox ri = new RepositoryItemComboBox();
                ri.TextEditStyle = TextEditStyles.DisableTextEditor;
                ri.Items.AddRange(new object[] { DBNull.Value,"Klasik",
                                                    "Spor",
                                                    "Buhar" });
                return ri;
            }
        }

        public PO()
        {
            InitializeComponent();
        }

        public PO(int POId)
            : this()
        {
            this.POId = POId;
        }

        bool edit;
        public PO(int POId, bool edit)
            : this()
        {
            this.POId = POId;
            this.edit = edit;
        }
        #endregion

        private void PO_Load(object sender, EventArgs e)
        {
            btnBekleyen.Visibility = isKD ? BarItemVisibility.Always : BarItemVisibility.Never;

            TAM.POTableAdapter = new POTableAdapter();
            TAM.POLinesTableAdapter = new POLinesTableAdapter();
            TAM.AyrimlarTableAdapter = new AyrimlarTableAdapter();
            TAM.POSipTableAdapter = new POSipTableAdapter();
            ds.POLines.TableNewRow += POLines_TableNewRow;

            riHyperLink.SingleClick = false;
            btnFiltreTemizle.Click += btnFiltreTemizle_Click;
            btnGetir.Click += btnGetir_Click;
            tabAna.SelectedPageChanging += tabAna_SelectedPageChanging;
            splitterPoLines.AutoSize();
            BarcodeRead += PO_BarcodeRead;

            bool yeni = (POId > 0);

            InitMasks();
            InitGridViews();
            InitBands();

            splitterPoLines.AcKapa(false);
            EnableBarcodeType(1);
            CreateSearchPanel();

            //ds.xPOStok.Columns.Add("IdleQty", typeof(decimal));

            SetExpressions(true);

            GetPOs();

            if (yeni)
            {
                lastPOId = POId;
                tabAna.SelectedTabPage = tpPOLines;
            }

            gvPOLines.Columns["PRO"].ToolTip = "Eğer kartın daha önceden açılmış olduğunu biliyorsanız buradan seçin.";
            gvPOLines.Columns["GarniVarMi"].ToolTip = "Talebin çok az bir kısmı da olsa 'Garni' varsa işaretleyin. ";


            if (edit)
                btnGuncelle.PerformClick();

            gvPOLines.Columns["UreticiKodu"].ColumnEdit = new RepositoryItemTextEdit();
            ((RepositoryItemGridLookUpEdit)gvPOLines.Columns["KVendorId"].ColumnEdit).Closed += PO_Closed;

            btnYeniKodUret.ItemClick += btnYeniKodUret_ItemClick;
            btnBekleyen.ItemClick += btnBekleyen_ItemClick;
        }

        void btnBekleyen_ItemClick(object sender, ItemClickEventArgs e)
        {
            ds.PO.Clear();
            ClearTables();
            GetDetails("PO", "GetPO_Bekleyen");
            BestFit();
        }

        void btnYeniKodUret_ItemClick(object sender, ItemClickEventArgs e)
        {
            using (YeniKodUret ku = new YeniKodUret())
                ku.ShowDialog();
        }

        private void InitMasks()
        {
            Masks = new Dictionary<int, string>();
            Masks.Add(004, @"[F]\w{5,7}/\w{6}");  //ALBINI
            Masks.Add(003, @"^(FA)\w{6}/\w{6}");  //ALBIATE
            Masks.Add(147, @"\w{3}-\w{4}/\w{4}");   //ANDREAZZA & CASTELLI
            Masks.Add(007, @"\w{4}-\w{4}/\w{4}");     //ARCOTEX
            Masks.Add(012, @"\w{4,5}/\w{4}");    //BRENNET
            Masks.Add(013, @"\w{4}-\w{4}/\w{4}|\w{5}-\w{5}/\w{4}|\w{6}-\w{6}/\w{4}");    //CANCLINI
            Masks.Add(106, @"\w{5}/\w{5}");     //GRANDI RUBINELLI
            Masks.Add(038, @"\w{4}-\w{4}/\w{6}");    //LEGGIUNO
            Masks.Add(040, @"\w{5}-\w{4}/\w{2}");    //MILETA
            Masks.Add(042, @"\w{3}-(\w{2}-)?\w{4}/\w{3}");    //MONTI
            Masks.Add(189, @"[U]\w{4}-\w{4}/\w{4}|\w{5}-\w{6}/\w{4}");  //PROFILO TESSILE
            Masks.Add(578, @"[U]\w{4}-\w{4}/\w{4}|\w{5}-\w{6}/\w{4}");  //PROFILO CHINA
            Masks.Add(120, @"\w{4}-\w{4}/\w{4}");   //TEKSTINA
            Masks.Add(057, @"\w{4}-\w{4}/\w{3}");    //TESTA
            Masks.Add(059, @"[F]\w{5,7}/\w{6}");     //THOMAS MASON
            Masks.Add(153, @"\w{5}-\w{4}/\w{2}|\w{5}-\w{4}/\w{3}");     //WEBA
            Masks.Add(052, @"\w{1,}-\w{4}/\w{6}");   //SOMELOS
        }

        void PO_Closed(object sender, ClosedEventArgs e)
        {
            gvPOLines.EndEditing();
        }

        Dictionary<int, string> Masks;

        void POLines_TableNewRow(object sender, DataTableNewRowEventArgs e)
        {
            e.Row["PODurumId"] = 1;
            e.Row["UserId"] = WhoAmI;
            e.Row["stGenelId"] = 1;
            e.Row["POId"] = POId;
        }

        bool POLinesCancelEdit(int rowHandle, string columnName)
        {
            //TODO: eski/yanlış UreticiKodları nasıl değiştirilecek! 
            //return false;

            if (gvPOLines.FocusedRowHandle == GridControl.NewItemRowHandle)
                return false;

            int poDurumId = gvPOLines.GetRowCellValue(rowHandle, "PODurumId").ToInt();

            if (isKD)
            {
                //if (@",UreticiTercihiId,TalepTeknikOzellik,Notes,GHesapFiyati,GomlekAdedi,BirimMetraj,KumasFiyati,YikamaRecetesi,Tarandi,".Contains("," + columnName + ","))
                //    return true;
                //else
                return false;
            }
            else
            {
                return poDurumId > 1;
            }
        }


        void gvPOLines_Pasting(int rowHandle, GridColumn column, object val, CancelEventArgs ce)
        {
            ce.Cancel = POLinesCancelEdit(rowHandle, column.FieldName);
        }

        private void gvPOLines_ShowingEditor(object sender, CancelEventArgs e)
        {
            e.Cancel = POLinesCancelEdit(gvPOLines.FocusedRowHandle, gvPOLines.FocusedColumn.FieldName);
        }

        private bool AyrimlarCancelEdit(int rowHandle, string column)
        {
            if (gvAyrimlar.FocusedRowHandle == GridControl.NewItemRowHandle)
                return false;

            int poDurumId = gvPOLines.GetRowCellValue(rowHandle, "PODurumId").ToInt();

            if (isKD)
            {
                //if (@",UreticiTercihiId,TalepTeknikOzellik,Notes,GHesapFiyati,GomlekAdedi,BirimMetraj,KumasFiyati,YikamaRecetesi,Tarandi,".Contains("," + columnName + ","))
                //    return true;
                //else
                return false;
            }
            else
            {
                decimal YuklenenMt = gvAyrimlar.GetFocusedRowCellValue("QtyShipped").ToDecimal();
                if (YuklenenMt > 0)
                    return true;
                else
                    return poDurumId > 1;
            }
        }

        private void gvPOSip_RowCellClick(object sender, RowCellClickEventArgs e)
        {
            if (e.RowHandle < 0)
                return;

            Cursor.Current = Cursors.WaitCursor;

            if (e.Column.FieldName == "PONr")
            {

                DataRow dr = gvPOSip.GetDataRow(e.RowHandle);
                int dosyaId = dr["DosyaId"].ToInt();
                UretimFoyunuDosyadanGoster(dosyaId);
            }

            Cursor.Current = Cursors.Default;
        }

        private void ShowPOOlustur(int VendorId, int poSipId, string poNr, bool createDefaultFoyOnCancel = false)
        {
            DataSet dsFoy = ExecuteDataSet("GetKumasSiparisFoy2", WhoAmI, true, DBNull.Value, DBNull.Value, poSipId);
            POOlustur po = new POOlustur(dsFoy, poSipId, poNr, VendorId);
            DialogResult dr = po.ShowDialog();

            //TODO K.A : koşulun 2. bölümünden dolayı girmiyor. Kasım' a sorulacak
            if (createDefaultFoyOnCancel && dr != DialogResult.OK)
                ExecuteNonQuery("UpdPOSip", poSipId, po.FoyOlustur(false), DateTime.Now, WhoAmI, "", "");

            GetDetails("POLines", "GetPOLinesByPOSipId", poSipId);
        }

        private void UretimFoyunuDosyadanGoster(int DosyaId)
        {
            if (DosyaId > 0)
            {
                DataTable dtDosya = ExecuteDataTable("GetDoc", DosyaId);

                byte[] bytes = (byte[])dtDosya.Rows[0]["BLOB"];
                DevTeam.FileManager.RunTempFile("SiparisFoyu_DosyaId_" + DosyaId + ".pdf", bytes);
            }
        }


        private void UreticiFoyuOlustur(bool onizleme)
        {
            if (KayitOnay() == System.Windows.Forms.DialogResult.Yes)
            {
                this.Cursor = Cursors.WaitCursor;

                int[] selectedRows = gvPOLines.GetSelectedRows();

                btnKaydet.PerformClick();
                if (selectedRows.Length == 0 && gvPOLines.FocusedRowHandle != GridControl.NewItemRowHandle)
                    selectedRows = new int[] { gvPOLines.FocusedRowHandle };

                List<string> pols = new List<string>();
                Dictionary<int, List<string>> vendors = new Dictionary<int, List<string>>();
                bool found = false;
                foreach (int rowHandle in selectedRows)
                {
                    int poDurumId = gvPOLines.GetRowCellValue(rowHandle, "PODurumId").ToInt(-1);
                    int vendorId = gvPOLines.GetRowCellValue(rowHandle, "VendorId").ToInt(-1);
                    int productId = gvPOLines.GetRowCellValue(rowHandle, "ProductId").ToInt(-1);
                    string uk = gvPOLines.GetRowCellValue(rowHandle, "UreticiKodu").ToStr();
                    string ponr = gvPOLines.GetRowCellValue(rowHandle, "PONr").ToStr();
                    if (productId < 1 && uk == "")
                    {
                        XtraMessageBox.Show("Seçtiğiniz satırlarda kumaş ya da üretici kodu belirlenmemiş satırlar var. Lütfen önce bunları belirleyin.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                    if (vendorId < 1)
                    {
                        XtraMessageBox.Show("Seçtiğiniz satırlarda Üreticisi belirlenmemiş satırlar var. Lütfen önce bunları belirleyin.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }


                    if (!vendors.ContainsKey(vendorId))
                        vendors.Add(vendorId, new List<string>());

                    // < 4 = Yeni, MP Föy Oluşturdu, KD Föyü onayladı
                    //if (onizleme || poDurumId < 4 || ConfExpert.Utility.Ribbon.RibbonManager.isDeveloper)
                    if (onizleme || poDurumId < 4 || (poDurumId == 6 && ponr == ""))
                    {
                        vendors[vendorId].Add(gvPOLines.GetRowCellValue(rowHandle, "POLinesId").ToString());
                        found = true;
                    }
                }

                if (!found)
                {
                    XtraMessageBox.Show("Seçtiğiniz satırlarda sipariş oluşturulabilecek satır yok.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }


                foreach (int VendorId in vendors.Keys)
                {
                    string poLinesIds = string.Join(",", vendors[VendorId].ToArray());

                    KumasSiparisFoyu ks = new KumasSiparisFoyu();
                    {
                        if (onizleme)
                        {
                            DataSet ds = Session.DataManager.ExecuteDataSet("GetKumasSiparisFoy2", WhoAmI, true, poLinesIds, DBNull.Value, DBNull.Value);

                            ks.KumasSiparisFoyuOnizlemeOlustur(ds);
                            ks.ShowPreview();
                        }
                        else
                        {
                            DataRow drPOSipId = ExecuteDataTable("InsPOSip", POId, poLinesIds, WhoAmI, VendorId).Rows[0];
                            int poSipId = drPOSipId["POSipId"].ToInt();
                            string poNr = drPOSipId["PONr"].ToStr();

                            ShowPOOlustur(VendorId, poSipId, poNr, true);
                        }
                    }
                }

                if (!onizleme)
                {
                    GetDetails("POMpFoy;POSip", "GetPOMPFoy", POId);
                    RefreshTabPageTexts();
                }

                this.Cursor = Cursors.Default;
            }
        }

        private void TalepFoyuGoster(int foyId)
        {
            if (foyId > 0)
            {
                using (KumasSiparisFoyu ks = new KumasSiparisFoyu())
                {
                    DataSet data = ExecuteDataSet("GetKumasSiparisFoy2", WhoAmI, false, DBNull.Value, foyId, DBNull.Value);
                    ks.TalepFoyuOlustur(data);
                    ks.ShowPreviewDialog();
                }
            }
        }

        private void TalepFoyuOlustur(bool onizleme)
        {
            if (KayitOnay() == System.Windows.Forms.DialogResult.Yes)
            {
                int[] selectedRows = gvPOLines.GetSelectedRows();

                btnKaydet.PerformClick();
                if (selectedRows.Length == 0 && gvPOLines.FocusedRowHandle != DevExpress.XtraGrid.GridControl.NewItemRowHandle)
                    selectedRows = new int[] { gvPOLines.FocusedRowHandle };

                List<string> pols = new List<string>();
                Dictionary<int, List<string>> vendors = new Dictionary<int, List<string>>();
                bool found = false;
                foreach (int rowHandle in selectedRows)
                {
                    DataRow dr = gvPOLines.GetDataRow(rowHandle);

                    int poDurumId = dr["PODurumId"].ToInt(-1);

                    int ureticiId = dr["VendorId"].ToInt(-1);
                    if (ureticiId == -1 && dr["UreticiTercihiId"].ToInt() > 0)
                        ureticiId = dr["UreticiTercihiId"].ToInt();

                    int productId = dr["ProductId"].ToInt(-1);

                    if (!vendors.ContainsKey(ureticiId))
                        vendors.Add(ureticiId, new List<string>());

                    if (onizleme || poDurumId == 1 || isDeveloper)
                    {
                        vendors[ureticiId].Add(gvPOLines.GetRowCellValue(rowHandle, "POLinesId").ToString());
                        found = true;
                    }

                    string istek = dr["CadHl"].ToStr();
                    int istekAyrimId = dr["AyrimId"].ToInt();

                    if (istek != "" && istekAyrimId == 0)
                    {
                        XtraMessageBox.Show("Cad/Hl/Analiz seçildiğinde 'İstek Ayrım' sütunu doldurulmalıdır !", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                }

                if (!found)
                {
                    XtraMessageBox.Show("Seçtiğiniz satırlarda talep föyü oluşturulmamış satır yok.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                foreach (int VendorId in vendors.Keys)
                {
                    string poLinesIds = string.Join(",", vendors[VendorId].ToArray());

                    KumasSiparisFoyu ks = new KumasSiparisFoyu();
                    {
                        if (onizleme)
                        {
                            DataSet ds = ExecuteDataSet("GetKumasSiparisFoy2", WhoAmI, false, poLinesIds, DBNull.Value, DBNull.Value);

                            ks.TalepFoyuOnizlemeOlustur(ds);
                            ks.ShowPreviewDialog();

                        }
                        else
                        {
                            using (YeniMPFoy foy = new YeniMPFoy(VendorId, POId))
                            {
                                if (foy.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                                    return;

                                foreach (int rowHandle in selectedRows)
                                {
                                    DataRow dr = gvPOLines.GetDataRow(rowHandle);

                                    int ureticiId = dr["VendorId"].ToInt(-1);
                                    if (ureticiId == -1 && dr["UreticiTercihiId"].ToInt() > 0)
                                        ureticiId = dr["UreticiTercihiId"].ToInt();


                                    if (ureticiId == VendorId)
                                    {
                                        gvPOLines.SetRowCellValue(rowHandle, "POMpFoyId", foy.POMpFoyId);
                                        gvPOLines.SetRowCellValue(rowHandle, "PODurumId", 2);
                                    }
                                }

                                gvPOLines.EndEditing();
                                btnKaydet.PerformClick();

                                DataSet data = ExecuteDataSet("GetKumasSiparisFoy2", WhoAmI, false, DBNull.Value, foy.POMpFoyId, DBNull.Value);
                                ks.TalepFoyuOlustur(data);
                                ks.ShowPreview();
                            }
                        }
                    }
                }
                if (!onizleme)
                {
                    GetDetails("POMpFoy;POSip", "GetPOMPFoy", POId);
                    RefreshTabPageTexts();
                }
            }
        }

        private void RefreshTabPageTexts()
        {
            tpPOSip.Text = "Üretici Siparişleri (" + ds.POSip.Rows.Count + ")";
            tpPOMpFoy.Text = "Talep Föyleri (" + ds.POMpFoy.Rows.Count + ")";
            tpPOSip.PageVisible = ds.POSip.Rows.Count > 0;
            tpPOMpFoy.PageVisible = ds.POMpFoy.Rows.Count > 0;
        }
                
        void tabAna_SelectedPageChanging(object sender, TabPageChangingEventArgs e)
        {
            if (SaveAndContinue() == false)
            {
                e.Cancel = true;
                gvPO.FocusedRowHandle = gvPO.LocateByValue("POId", lastPOId);
            }
        }

        private bool SaveAndContinue()
        {
            if (lastPOId != POId)
            {
                DialogResult dr = SaveChanges();
                if (dr == DialogResult.Cancel)
                    return false;

                if (tabAna.SelectedTabPage == tpPO)
                {
                    GetPODetail(POId);
                    lastPOId = POId;
                }
            }

            return true;
        }

        private void InitBands()
        {
            gvPOLines.Bands.Clear();


            AddBand("Temel", "POLinesId,SiraNo,POId,POMpFoyId,PONr,stGenelId,PODurumId,VendorId,Scan,PRO,SKTeknikOzellik");
            AddBand("Metrajlar", "TotalQty,QtyShipped,QtyArrived,QtyMissing,IdleQty");

            AddBand("MP'nin Talepleri", "UreticiTercihiId,CadHl,GarniVarMi,AyrimId,TalepTeknikOzellik,Notes,GHesapFiyati,GomlekAdedi,BirimMetraj,KumasFiyati,HLNo,CadNo,KCustomerId,MusteriKodu,KVendorId,UreticiKodu,YikamaRecetesi,Utu,Tarandi");

            AddBand("KD'nin Girdiği Bilgiler", "KabulTarihi,RedSebebi,OrderDate,KstCategoryId,KstCategory2Id,KDTeknikOzellik,VendorNotes,UreticiSipNo");


            foreach (DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn gc in gvPOLines.Columns)
            {
                if (!gc.Visible || gc.OwnerBand == null)
                    gc.OptionsColumn.ShowInCustomizationForm = false;
            }

        }
        private void AddBand(string bandName, string columns)
        {
            GridBand band = gvPOLines.Bands.AddBand(bandName);
            band.ImageIndex = (gvPOLines.Bands.Count - 1) % 6;
            foreach (string colName in columns.Split(','))
            {
                BandedGridColumn gc = (BandedGridColumn)gvPOLines.Columns[colName];
                band.Columns.Add(gc);
                gc.Visible = true;
            }
        }
        private void gvPOLines_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (e.RowHandle > -1)
            {
                if (e.Column.FieldName.EndsWith("Qty"))
                    e.Appearance.Font = new System.Drawing.Font(e.Appearance.Font, FontStyle.Bold);
                //else if (e.Column.FieldName == "VendorId" && e.CellValue == DBNull.Value)
                //    e.Appearance.BackColor = Color.SkyBlue;
                //else if (e.Column.FieldName == "ProductId" && e.CellValue == DBNull.Value)
                //    e.Appearance.BackColor = Color.SkyBlue;
                else if (e.Column.FieldName == "PODurumId" && e.CellValue != DBNull.Value)
                {
                    switch (e.CellValue.ToInt(-1))
                    {
                        case 1:
                            //e.Appearance.BackColor = Color.White;
                            break;
                        case 2:
                            e.Appearance.BackColor = Color.Gold;
                            break;
                        case 8:
                            e.Appearance.BackColor = Color.Red;
                            e.Appearance.ForeColor = Color.White;
                            e.Appearance.Font = new Font(e.Appearance.Font, FontStyle.Strikeout);
                            break;
                        case 9:
                            e.Appearance.BackColor = Color.Red;
                            e.Appearance.ForeColor = Color.White;
                            e.Appearance.Font = new Font(e.Appearance.Font, FontStyle.Strikeout);
                            break;
                        default:    //TODO: hepsi yeşil olmamalı!
                            e.Appearance.BackColor = Color.YellowGreen;
                            break;
                    }
                }
            }
        }

        private void gvPOLines_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
        {
            int rh = gvPOLines.GetRowHandle(e.ListSourceRowIndex);
            if (rh < 0)
                return;

            if (e.Column.FieldName == "PONr")
            {
                int poSipId = gvPOLines.GetRowCellValue(rh, "POSipId").ToInt(-1);

                if (ds.POSip.FindByPOSipId(poSipId) != null)
                    e.DisplayText = ds.POSip.FindByPOSipId(poSipId).PONr;
            }
            else if (e.Column.FieldName == "POMpFoyId")
            {
                if (ds.POMpFoy.Rows.Count > 0)
                {
                    int POLinesId = gvPOLines.GetRowCellValue(rh, "POLinesId").ToInt();
                    foreach (string id in ds.POMpFoy.Rows[0]["POLinesIds"].ToStr().Split(','))
                    {
                        if (id == POLinesId.ToStr())
                            e.DisplayText = ds.POMpFoy.Rows[0]["POMPFoyId"].ToStr();
                    }
                }
            }
        }

        private void gvPO_RowCellClick(object sender, RowCellClickEventArgs e)
        {
            if (e.RowHandle > -1 && e.Column.FieldName == "POId")
                tabAna.SelectedTabPage = tpPOLines;
        }

        private void SetExpressions(bool status)
        {
            ds.Ayrimlar.Columns["Qty"].Expression = "ISNULL(QtyRevised,QtyNeeded)";
            ds.Ayrimlar.Columns["QtyMissing"].Expression = "ISNULL(Qty,0)-ISNULL(QtyArrived,0)";
            ds.POLines.Columns["OrderDate"].Expression = status ? "Parent(FK_POLines_POSip_POSipId).OlusturmaTarihi" : null;
            ds.POLines.Columns["TotalQty"].Expression = status ? "SUM(Child(FK_Ayrimlar_POLines_POLinesId).Qty)" : null;
            ds.POLines.Columns["QtyShipped"].Expression = status ? "SUM(Child(FK_Ayrimlar_POLines_POLinesId).QtyShipped)" : null;
            ds.POLines.Columns["QtyArrived"].Expression = status ? "SUM(Child(FK_Ayrimlar_POLines_POLinesId).QtyArrived)" : null;
            ds.POLines.Columns["QtyMissing"].Expression = status ? "SUM(Child(FK_Ayrimlar_POLines_POLinesId).QtyMissing)" : null;
            ds.POLines.Columns["LineTotal"].Expression = status ? "TotalQty*AnlasilanFiyat" : null;
            ds.POLines.Columns["IdleQty"].Expression = status ? "SUM(Child(FK_xPOStok_POLines_POLinesId).Qty)" : null;
            ds.POLines.Columns["SiraNo2"].Expression = "ISNULL(SiraNo,1000)";

            gvPOLines.RefreshData();
        }

        private void InitGridViews()
        {
            #region Init.gvPO
            ds.PO.Columns.Add("T", typeof(int));
            ds.PO.Columns.Add("S", typeof(int));
            ds.PO.Columns.Add("U", typeof(int));
            ds.PO.Columns.Add("D", typeof(int));
            ds.PO.Columns.Add("AyrimReferansi", typeof(string));
            ds.PO.Columns.Add("A", typeof(int));
            ds.PO.Columns.Add("K", typeof(int));
            ds.PO.Columns.Add("İ", typeof(int));

            bsPO = new BindingSource(ds, "PO");
            InitGridView(gvPO, bsPO);
            AddBsToList(bsPO);

            gvPO.SetCaptions("T:MP", "S:KD", "U:Ü", "TalepTipiId:Talep Tipi", "AyrimReferansi:Ayrım Referansı", "Notes:MP Notları", "KDNotes:KD Notları", "UserId:Talebi Açan", "TalepTarihi:Oluşturulma");
            gvPO.AddSummary("T", "S", "U", "D", "A", "K", "İ");
            gvPO.MakeColumnInvisible("UretimTipiId");
            gvPO.Columns["T"].ToolTip = "MP'lerde bekleyen";
            gvPO.Columns["S"].ToolTip = "KD'de bekleyen; henüz siparişi verilmemiş";
            gvPO.Columns["U"].ToolTip = "ÜRETİM aşamasında bekleyen; bir kısmı veya tamamı gelmemiş";
            gvPO.Columns["D"].ToolTip = "DEPOYA tamamı gelmiş";
            gvPO.Columns["A"].ToolTip = "Bu PO'daki AÇIK satır sayısı";
            gvPO.Columns["K"].ToolTip = "Bu PO'daki KAPALI satır sayısı";
            gvPO.Columns["İ"].ToolTip = "Bu PO'daki İPTAL satır sayısı";

            gvPO.Columns["POId"].ColumnEdit = riHyperLink;

            gvPO.RowCellClick += gvPO_RowCellClick;



            gvPO.FocusedRowChanged += gvPO_FocusedRowChanged;


            gvPO.MakeReadOnly();

            if (isKD)
            {
                GridMenu gmPO = GridManager.GetManager(gvPO).GridMenu;
                gmPO.AddMenu("PO Sil", POSil);
                gvPO.Columns["KDNotes"].OptionsColumn.AllowEdit = true;

                gvPO.MakeReadOnly("KDNotes");
            }
            else
            {
                gvPO.MakeReadOnly("Notes");
            }

            #endregion

            #region Init.gvPOLines

            ds.POLines.Columns.Add("PONr", typeof(string));
            ds.POLines.Columns.Add("Tarandi", typeof(string));
            ds.POLines.Columns.Add("OrderDate", typeof(DateTime));
            ds.POLines.Columns.Add("SubmissionDate", typeof(DateTime));
            ds.POLines.Columns.Add("TotalQty", typeof(decimal));
            ds.POLines.Columns.Add("QtyShipped", typeof(decimal));
            ds.POLines.Columns.Add("QtyArrived", typeof(decimal));
            ds.POLines.Columns.Add("QtyMissing", typeof(decimal));
            ds.POLines.Columns.Add("LineTotal", typeof(decimal));
            ds.POLines.Columns.Add("IdleQty", typeof(decimal));
            ds.POLines.Columns.Add("SiraNo2", typeof(int));

            gvPOLines.DisableRowDelete();

            bsPOLines = new BindingSource(bsPO, "FK_POLines_PO_POId");
            InitGridView(gvPOLines, bsPOLines);
            AddBsToList(bsPOLines);

            if (!ytk(235))
            {
                gvPOLines.ValidateRow += new DevExpress.XtraGrid.Views.Base.ValidateRowEventHandler(gridView1_ValidateRow);
                gvPOLines.InvalidRowException += new DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventHandler(gridView1_InvalidRowException);
                //gvPOLines.ValidatingEditor += new DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventHandler(gridView1_ValidatingEditor);
            }

            gvPOLines.Images = bgvIcons;
            gvPOLines.ColumnPanelRowHeight = 28;
            gvPOLines.Appearance.HeaderPanel.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
            gvPOLines.Appearance.HeaderPanel.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center;

            GridColumn col = new GridColumn();
            col.Caption = "PDF";
            gvPOSip.Columns.Add(col);

            gvPOLines.Columns["CadHl"].ColumnEdit = riIstekler;
            gvPOLines.Columns["YikamaRecetesi"].ColumnEdit = PO.riYikama;
            gvPOLines.Columns["Utu"].ColumnEdit = PO.riUtu;
            gvPOLines.Columns["UreticiTercihiId"].ColumnEdit = RI(Rp.Vendor);

            gvPOLines.FormatAsNumber(1, "QtyShipped", "QtyArrived", "QtyMissing", "IdleQty", "LineTotal", "TotalQty");
            gvPOLines.FormatAsDate("OrderDate", "SubmissionDate", "ETA", "KabulTarihi");
            gvPOLines.AddSummary("QtyShipped", "QtyArrived", "QtyMissing", "IdleQty", "LineTotal", "TotalQty");
            gvPOLines.Columns["Tarandi"].ToolTip = "Tarandı mı?";
            gvPOLines.Columns["AnlasilanFiyat"].ColumnEdit = RepositoryManager.MaskedNumeric(2);
            gvPOLines.MakeColumnInvisible("POId", "POSipId", "SubmissionDate");
            gvPOLines.Columns["TotalQty"].VisibleIndex = gvPOLines.Columns["PRO"].VisibleIndex + 1;

            gvPOLines.SetCaptions("UserId:Talebi Açan", "POId:PO", "POMpFoyId:Talep Föyü", "GomlekAdedi:Gömlek Adedi", "SiraNo:Sıra", "POLinesId:#", "stGenelId:Genel Durum", "PODurumId:Durum", "PONr:PO Nr.", "Tarandi:T", "SKTeknikOzellik:Kumaş Teknik Özellik", "TalepTeknikOzellik:KD'ye Teknik Özellik", "KDTeknikOzellik:Üreticiye Teknik Özellik", "MusteriKodu:Müşteri Kodu", "UreticiKodu:Üretici Kodu", "TotalQty:Toplam\nTalep", "QtyShipped:Yüklenen\nMetraj", "QtyArrived:Gelen\nMetraj", "QtyMissing:Eksik\nMetraj", "IdleQty:Idle\nMetraj"
               , "Notes:KD'ye Notlar", "VendorNotes:Üreticiye Notlar", "GHesapFiyati:G.Hesap.Fiyatı", "HLNo:H/L", "YikamaRecetesi:Yıkama Reçetesi"
               , "OrderDate:Sipariş Tarihi", "SubmissionDate:Kesinleşme Tarihi", "ETA:Tahmini Varış Tarihi", "UreticiSipNo:Üretici Sipariş No"
               , "VendorId:Sipariş Edilen Üretici", "AnlasilanFiyat:Anlaşılan Fiyat", "CurrencyId:Anlaşılan Parabirimi", "LineTotal:Satır Toplamı", "KabulTarihi:Föy Kabul Tarihi"
               , "CadHl:İstekler", "GarniVarMi:Garni", "AyrimId:İstek Ayrım", "KstCategoryId:Üretim Tipi", "KstCategory2Id:Fason İşlem", "Utu:Ütü", "UreticiTercihiId:Üretici Tercihi", "KCustomerId:Hangi Müşterinin Kodu", "KVendorId:Hangi Üreticinin Kodu", "KumasFiyati:Kumaş Fiyatı"
               );


            GridManager gmPOLines = GridManager.GetManager(gvPOLines);
            gmPOLines.Pasting += gvPOLines_Pasting;

            gvPOLines.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom;
            gvPOLines.SortInfo.Add(new GridColumnSortInfo(gvPOLines.Columns["SiraNo"], DevExpress.Data.ColumnSortOrder.Ascending));

            //gvPOLines.RowCellClick += gvPOLines_RowCellClick;
            gvPOLines.DoubleClick += gvPOLines_DoubleClick;
            gvPOLines.ShowingEditor += gvPOLines_ShowingEditor;
            gvPOLines.FocusedRowChanged += gvPOLines_FocusedRowChanged;
            gvPOLines.RowCellStyle += gvPOLines_RowCellStyle;

            ClickableColumns.AddRange(new string[] { "PONr", "POMpFoyId", "Tarandi" });

            //if (isKD)
            //    ClickableColumns.AddRange(new string[] { "SKTeknikOzellik" });

            gvPOLines.CellValueChanged += gvPOLines_CellValueChanged;
            gvPOLines.CustomColumnDisplayText += gvPOLines_CustomColumnDisplayText;

            RepositoryItemTextEdit te = new RepositoryItemTextEdit();
            te.ExportMode = ExportMode.DisplayText;
            gvPOLines.Columns["PONr"].ColumnEdit = te;


            gmPOLines.GridMenu.AddMenu("Kod Sihirbazı", KodSihirbazi_ItemClick);
            if (isKD)
                gmPOLines.GridMenu.AddMenu("Stok Kartlarını Düzenle", btnStokKartiDuzenle_ItemClick);

            gmPOLines.GridMenu.AddMenu("Standart Tarama", btnStandartTara_ItemClick, true);
            gmPOLines.GridMenu.AddMenu("Büyük Tarama", btnBuyukTara_ItemClick);

            gmPOLines.GridMenu.AddMenu("Satır Sil", btnPOLinesSil_ItemClick, true);

            gmPOLines.GridMenu.AddMenu("Talep Föyü Oluştur", btnFoyOlustur_ItemClick, true);
            gmPOLines.GridMenu.AddMenu("Talep Föyü Önizleme", btnTalepFoyuOnizleme_ItemClick);
            
            if (isKD)
            {
                gmPOLines.GridMenu.AddMenu("HL Getir", HLAl, true);
                gmPOLines.GridMenu.AddMenu("HL Listesine Kaydet", HLVer);

                gmPOLines.GridMenu.AddMenu("Üretici Siparişi Oluştur", btnUreticiSipOlustur_ItemClick, true);
                gmPOLines.GridMenu.AddMenu("Üretici Siparişi Önizleme", btnUreticiFoyOnizleme_ItemClick);
                gmPOLines.GridMenu.AddMenu("Üretici Siparişini Geri Çek", btnUreticiSipGeriCek_ItemClick);
                gmPOLines.GridMenu.AddMenu("Fiyat Teklif Föyü Oluştur", btnFiyatTeklifi_ItemClick);

                gmPOLines.GridMenu.AddMenu("Seçili Satırları Onayla", btnOnay_ItemClick, true);
                gmPOLines.GridMenu.AddMenu("Seçili Satırları Reddet", btnReddet_ItemClick);

                gmPOLines.GridMenu.AddMenu("Seçili Satırları AÇIK yap", btnSetDurum_Acik, true);
                gmPOLines.GridMenu.AddMenu("Seçili Satırları KAPALI yap", btnSetDurum_Kapali);
                gmPOLines.GridMenu.AddMenu("Seçili Satırları İPTAL yap", btnSetDurum_Iptal);
            }

            gvPOLines.MakeColumnsReadOnly("SKTeknikOzellik", "Tarandi", "PONr", "POMpFoyId", "PODurumId", "KabulTarihi", "QtyShipped", "QtyArrived", "QtyMissing", "IdleQty", "TotalQty");

            #endregion

            #region Init.gvAyrimlar

            ds.Ayrimlar.Columns.Add("BrandId", typeof(int));
            ds.Ayrimlar.Columns.Add("SezonId", typeof(int));
            ds.Ayrimlar.Columns.Add("OrderRef", typeof(string));
            ds.Ayrimlar.Columns.Add("Qty", typeof(decimal));
            ds.Ayrimlar.Columns.Add("QtyShipped", typeof(decimal));
            ds.Ayrimlar.Columns.Add("QtyArrived", typeof(decimal));
            ds.Ayrimlar.Columns.Add("QtyMissing", typeof(decimal));

            bsAyrimlar = new BindingSource(bsPOLines, "FK_Ayrimlar_POLines_POLinesId");
            InitGridView(gvAyrimlar, bsAyrimlar);
            AddBsToList(bsAyrimlar);

            gvAyrimlar.ShowingEditor += gvAyrimlar_ShowingEditor;
            GridManager gmAyrimlar = GridManager.GetManager(gvAyrimlar);
            gmAyrimlar.Pasting += gmAyrimlar_Pasting;

            gvAyrimlar.SetViewCaption("Ayrımlar + Yüklemeler");

            gvAyrimlar.SetCaptions("AyrimlarId:#", "OrderRef:Order Ref.", "QtyNeeded:Talep Metraj", "QtyRevised:Revize Metraj", "Qty:Geçerli Metraj",
                 "QtyShipped:Yüklenen Metraj", "QtyArrived:Gelen Metraj", "QtyMissing:Eksik Metraj", "UserId:Talep Eden");
            gvAyrimlar.MakeColumnInvisible("POLinesId", "AyrimId");
            gvAyrimlar.FormatAsNumber(1, "QtyNeeded", "QtyRevised", "Qty", "QtyShipped", "QtyArrived", "QtyMissing");
            gvAyrimlar.AddSummary("QtyNeeded", "QtyRevised", "Qty", "QtyShipped", "QtyArrived", "QtyMissing");

            gvAyrimlar.YanYanaGetirSoluna("QtyNeeded", "BrandId", "SezonId", "OrderRef");
            gvAyrimlar.YanYanaGetirSoluna("UserId", "Qty", "QtyShipped", "QtyArrived", "QtyMissing");

            gvAyrimlar.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
            gvAyrimlar.RowCellStyle += gvPOLines_RowCellStyle;

            if (isKD)
                gvAyrimlar.MakeReadOnly("GomlekTermini", "QtyRevised", "MuadilId");

            #endregion

            #region Init.gvPOSip

            ds.POSip.Columns.Add("ToplamMetraj", typeof(decimal));
            ds.POSip.Columns.Add("ToplamTutar", typeof(decimal));
            ds.POSip.Columns.Add("VendorId", typeof(int));
            ds.POSip.Columns.Add("POId", typeof(int));

            bsPOSip = new BindingSource(ds, "POSip");
            InitGridView(gvPOSip, bsPOSip);
            AddBsToList(bsPOSip);

            gvPOSip.Columns["PONr"].ColumnEdit = riHyperLink;
            gvPOSip.FormatAsDateTime("OlusturmaTarihi");
            gvPOSip.FormatAsNumber(2, "ToplamTutar");
            gvPOSip.FormatAsNumber(1, "ToplamMetraj");

            gvPOSip.SetCaptions("POSipId:#", "PONr:PO Nr.", "OlusturmaTarihi:Sipariş Tarihi", "GonderilmeTarihi:Sipariş Geçilme Tarihi", "SipVerenId:Sipariş Veren", "Notes:Notlar", "Ilgili:Siparişi Alan");

            //TODO: toplam bilgileri eklenebilir !
            //gvPOSip.MakeColumnInvisible("POId", "POSipId", "VendorId", "ToplamMetraj", "ToplamTutar", "GonderilmeTarihi");
            gvPOSip.MakeColumnInvisible("POId", "VendorId", "ToplamMetraj", "ToplamTutar", "GonderilmeTarihi");
            gvPOSip.MakeReadOnly();

            gvPOSip.RowCellClick += gvPOSip_RowCellClick;

            #endregion

            #region Init.gvFoy
            bsFoy = new BindingSource(ds, "POMPFoy");
            AddBsToList(bsFoy);
            InitGridView(gvFoy, bsFoy);

            gvFoy.SetCaptions("POMpFoyId:Föy No", "UserId:Oluşturan", "OlusturulmaTarihi:Föy Tarihi", "Notes:Notlar");
            gvFoy.MakeColumnInvisible("POLinesIds", "VendorId");

            gvFoy.Columns["POMpFoyId"].ColumnEdit = riHyperLink;
            gvFoy.RowCellClick += gvFoy_RowCellClick;

            gvFoy.MakeReadOnly();
            gvFoy.BestFitColumns();

            #endregion
        }

        void gmAyrimlar_Pasting(int rowHandle, GridColumn column, object val, CancelEventArgs ce)
        {
            ce.Cancel = AyrimlarCancelEdit(rowHandle, column.FieldName);
        }

        void gvAyrimlar_ShowingEditor(object sender, CancelEventArgs e)
        {
            e.Cancel = AyrimlarCancelEdit(gvAyrimlar.FocusedRowHandle, gvAyrimlar.FocusedColumn.FieldName);
        }


        void gvPOLines_DoubleClick(object sender, EventArgs e)
        {
            GridView view = (GridView)sender;
            Point pt = view.GridControl.PointToClient(Control.MousePosition);

            GridHitInfo info = view.CalcHitInfo(pt);

            if (info.RowHandle > -1)
                if (info.InRow || info.InRowCell)
                {

                    string fieldName = info.Column.FieldName;

                    Cursor.Current = Cursors.WaitCursor;

                    if (fieldName == "Tarandi")
                    {
                        if (view.GetRowCellValue(info.RowHandle, "Tarandi").ToStr().ToLower() == "e")
                        {
                            int POLinesId = gvPOLines.GetRowCellValue(info.RowHandle, "POLinesId").ToInt(-1);

                            using (Detail2x d2x = new Detail2x(-POLinesId))
                                d2x.ShowDialog();

                            GC.Collect();
                        }
                    }
                    else if (fieldName == "PONr")
                    {
                        DataRow dr = gvPOLines.GetDataRow(info.RowHandle);
                        if (dr != null)
                        {
                            int poSipId = dr["POSipId"].ToInt();
                            int vendorId = dr["VendorId"].ToInt();
                            string poNr = ds.POSip.FindByPOSipId(poSipId).PONr;

                            ShowPOOlustur(vendorId, poSipId, poNr);
                        }
                    }
                    else if (fieldName == "POMpFoyId")
                    {
                        int foyId = gvPOLines.GetRowCellDisplayText(info.RowHandle, "POMpFoyId").ToInt();

                        TalepFoyuGoster(foyId);
                    }                    

                    Cursor.Current = Cursors.Default;

                }
        }

        void gvFoy_RowCellClick(object sender, RowCellClickEventArgs e)
        {
            if (e.Column.FieldName == "POMpFoyId")
            {
                int foyId = e.CellValue.ToInt();
                TalepFoyuGoster(foyId);
            }
        }

        private void gvPOLines_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (e.Column.FieldName == "ProductId")
            {
                int productId = e.Value.ToInt();
                if (productId > 0)
                    gvPOLines.SetRowCellValue(e.RowHandle, "SKTeknikOzellik", GetSKTeknikOzellik(productId));
            }
        }

        private void gvPOLines_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            gvAyrimlar.BestFitColumns();
            //SetMask("");
        }

        private bool SetMask(string degistirilenSutun)
        {
            //TODO: satır bazında tüm UreticiKodu maskeleri aynı anda değişiyor (içerik değil, görünüm!)
            DataRow dr = gvPOLines.GetFocusedDataRow();
            if (dr == null)
            {
                ((RepositoryItemTextEdit)gvPOLines.Columns["UreticiKodu"].ColumnEdit).Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.None;
                return true;
            }
            
            string ureticiKodu = dr["UreticiKodu"].ToStr();
            int KVendorId = dr["KVendorId"].ToInt();
            string mask = (Masks.ContainsKey(KVendorId) ? Masks[KVendorId] : string.Empty);

            RepositoryItemTextEdit t = ((RepositoryItemTextEdit)gvPOLines.Columns["UreticiKodu"].ColumnEdit);
            if (mask == "" /*|| degistirilenSutun == ""*/)
                t.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.None;
            else
            {
                t.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
                t.Mask.UseMaskAsDisplayFormat = true;
                t.Mask.EditMask = mask;
                if (ureticiKodu != "")
                {
                    Regex regex = new Regex(mask);
                    Match Eslesen = regex.Match(ureticiKodu);

                    if (!Eslesen.ToString().Equals(ureticiKodu))
                    {
                        Notify("Üretici kodu, üreticinin standartlarına uymuyor. Düzeltip tekrar deneyin.");
                        return false;
                    }
                }
            }
            return true;
        }

        void gridView1_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        {
            string col = gvPOLines.FocusedColumn.FieldName;
            switch (col)
            {
                case "KVendorId":
                case "UreticiKodu":
                    e.Valid = SetMask(col);
                    break;
            }
        }

        void gridView1_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
        {
            e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction;
        }

        void gridView1_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            string col = gvPOLines.FocusedColumn.FieldName;
            switch (col)
            {
                case "KVendorId":
                case "UreticiKodu":
                    e.Valid = SetMask(col);
                    break;
            }
        }

        private string GetSKTeknikOzellik(int ProductId)
        {
            MyData.V_KumasRow pr = AppSession.Lookups.V_Kumas.FindByProductId(ProductId);

            if (pr == null)
                return "";

            List<string> props = new List<string>();

            if (pr.IsKaliteIdNull())
            {
                if (!pr.IsKaliteAciklamaNull())
                    props.Add(pr.KaliteAciklama);

                if (!pr.IsKonstruksiyonNull())
                    props.Add(pr.Konstruksiyon);

                if (!pr.IsFinishIdNull())
                    props.Add(AppSession.Lookups.Finish.FindByFinishId(pr.FinishId).Name);

                if (!pr.IsKompozisyonIdNull())
                    props.Add(AppSession.Lookups.Kompozisyon.FindByKompozisyonId(pr.KompozisyonId)["Abbr"].ToStr());

                if (!pr.IsEnGrubuNull())
                    props.Add(pr.EnGrubu + " cm");

                if (!pr.IsFabricTypeIdNull())
                    props.Add(AppSession.Lookups.FabricType.FindByFabricTypeId(pr.FabricTypeId).Name);
            }
            else
            {
                MyData.KaliteRow kalite = AppSession.Lookups.Kalite.FindByKaliteId(pr.KaliteId);

                props.Add(kalite.Name);

                if (!kalite.IsKaliteNoNull())
                    props.Add(kalite.KaliteNo);

                if (!kalite.IsKonstruksiyonNull())
                    props.Add(kalite.Konstruksiyon);

                if (!kalite.IsFinishIdNull())
                    props.Add(AppSession.Lookups.Finish.FindByFinishId(kalite.FinishId).Name);

                if (!kalite.IsKompozisyonIdNull())
                    props.Add(AppSession.Lookups.Kompozisyon.FindByKompozisyonId(kalite.KompozisyonId)["Abbr"].ToStr());

                if (!kalite.IsEnGrubuNull())
                    props.Add(kalite.EnGrubu + " cm");

                if (!kalite.IsFabricTypeIdNull())
                    props.Add(AppSession.Lookups.FabricType.FindByFabricTypeId(kalite.FabricTypeId).Name);
            }

            return string.Join(" · ", props);

        }

        private void ValidateValues()
        {
            gvPOLines.EndEditing();

            if (ds.POLines.Rows.Count == 0)
                throw new ApplicationException("Lütfen en az bir satıra kod yazın.");

            if (ds.POLines.Select("isnull(MusteriKodu,'') = '' and isnull(UreticiKodu,'')  = '' and productId is null").Length > 0)
                throw new ApplicationException("Lütfen tüm satırlara kodları yazın ya da kod girilmemiş satırları silin.");

            List<int> PID = new List<int>();
            List<string> MK = new List<string>();
            List<string> UK = new List<string>();

            foreach (DataRow dr in ds.POLines.Rows)
            {
                if (dr.RowState == DataRowState.Deleted)
                    continue;

                int pid = dr["ProductId"].ToInt(-1);
                string mk = dr["MusteriKodu"].ToStr();
                string uk = dr["UreticiKodu"].ToStr();

                int kCustomerId = dr["KCustomerId"].ToInt(-1);
                int kVendorId = dr["KVendorId"].ToInt(-1);

                //if (pid != -1)
                //{
                //    if (!PID.Contains(pid))
                //        PID.Add(pid);
                //    else
                //        throw new ApplicationException("Aynı artikel farklı satırlara yazılamaz. (" + AppSession.Lookups.V_Kumas.FindByProductId(pid).Name + ")");

                //    //PO.796'da hata veriyor!
                //}

                if (mk != "")
                {
                    if (kCustomerId == -1)
                        throw new ApplicationException("Müşteri kodunun hangi müşteriye ait olduğunu belirtmelisiniz. (" + mk + ")");

                    //if (!MK.Contains(mk))
                    //    MK.Add(mk);
                    //else
                    //    throw new ApplicationException("Aynı müşteri kodu farklı satırlara yazılamaz. (" + mk + ")");
                }

                if (uk != "")
                {
                    if (kVendorId == -1)
                        throw new ApplicationException("Üretici kodunun hangi üreticiye ait olduğunu belirtmelisiniz. (" + uk + ")");

                    //if (!UK.Contains(uk))
                    //    UK.Add(uk);
                    //else
                    //    throw new ApplicationException("Aynı üretici kodu farklı satırlara yazılamaz. (" + uk + ")");
                }
            }
        }

        public void Scan(bool big = false)
        {
            btnKaydet.PerformClick();

            int POLinesId = gvPOLines.GetFocusedRowCellValue("POLinesId").ToInt(-1);
            if (gvPOLines.FocusedRowHandle > -1 && POLinesId > 0)
            {
                if (big)
                    big = (XtraMessageBox.Show("Bu seçenek, rapor boyu 10 cm.'den büyük kumaşlar içindir. Rapor boyu 10 cm.'den büyük mü?", "Dikkat", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes);

                this.Cursor = Cursors.WaitCursor;

                Image scanned = null;
                try
                {
                    scanned = Scanner.Scan(big);
                }
                catch
                {
                    //Exception scan içinde handle ediliyor !
                    this.Cursor = Cursors.Default;
                    return;
                }

                Scanner.PhotosTable photosTable = new Scanner.PhotosTable();
                DataRow dr = photosTable.AddRow(0, scanned, big);

                byte[] thumb = (byte[])dr["Photo1"];
                byte[] foy = (byte[])dr["Photo3"];


                gvPOLines.SetFocusedRowCellValue("Photo", thumb);
                ExecuteNonQuery("UpdPOTara", POLinesId, scanned.ToPNG(), thumb, foy, Environment.MachineName, big ? "big" : string.Empty);

                AppSession.MainForm.NotifyMain("Kaydedildi");

                scanned = null;
                GC.Collect();
            }

            this.Cursor = Cursors.Default;
        }

        void gvPO_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            POId = gvPO.GetFocusedRowCellValue("POId").ToInt();
        }

        private void GetPOs()
        {
            int focusedPOId = POId;
            int userId = WhoAmI;
            if (isKD)
                userId = -1; //Tüm markalar

            ds.PO.Clear();
            ClearTables();
            GetDetails("PO", "GetPOFiltered",
                userId,
                strParse(GetFilterValue("Durum")),
                intParse(GetFilterValue("PODurumId")),
                intParse(GetFilterValue("TalepTipiId")),
                intParse(GetFilterValue("UserId")),
                intParse(GetFilterValue("POId")),
                intParse(GetFilterValue("POLinesId")),
                intParse(GetFilterValue("POSipId")),
                intParse(GetFilterValue("ProductId")),
                intParse(GetFilterValue("KstCategoryId")),
                intParse(GetFilterValue("KstCategory2Id")),
                intParse(GetFilterValue("VendorId")),
                intParse(GetFilterValue("BrandId")),
                intParse(GetFilterValue("SezonId")),
                strParse(GetFilterValue("OrderRef")),
                strParse(GetFilterValue("Notes")));

            //if (gvPO.GetFocusedDataRow()!=null)
            //    GetPODetail(gvPO.GetFocusedDataRow()["POId"].ToInt());
            //else
            //    GetPODetail(0);

            BestFit();

            gvPO.FocusedRowHandle = gvPO.LocateByValue("POId", focusedPOId);
        }

        private void GetPODetail(int POId)
        {
            ClearTables();
            GetDetails("PO;POLines;Ayrimlar;xPOStok;POSip;POMPFoy", "GetPO2", POId);
            RefreshTabPageTexts();
            BestFit();
        }

        #region Föy Filtrele
        private void PO_BarcodeRead(int Type, int Barcode)
        {
            if (Type == 1)
            {
                DataTable dt = ExecuteDataTable("GetPOlinesIdsByBarkod", Barcode);
                if (dt.Rows.Count == 0)
                    return;

                DataRow dr = dt.Rows[0];
                FoyFiltrele(dr["PoId"].ToInt(), dr["PolinesIds"].ToStr());
            }
        }

        private void btnFoyIncele_ItemClick(object sender, ItemClickEventArgs e)
        {
            using (FoyIncele barkod = new FoyIncele())
            {
                DialogResult dr = barkod.ShowDialog();
                if (dr == DialogResult.OK)
                    if (barkod.POLinesIds != string.Empty && barkod.POId > 0)
                        FoyFiltrele(barkod.POId, barkod.POLinesIds);
            }
        }

        private void FoyFiltrele(int poId, string POLinesIds)
        {
            if (SaveAndContinue() == false)
                return;

            POId = poId;
            gvPO.FocusedRowHandle = gvPO.LocateByValue("POId", POId);
            gvPOLines.ActiveFilterString = "POLinesId in (" + POLinesIds + ")";
            tabAna.SelectedTabPage = tpPOLines;
        }
        #endregion

        #region Filtreler
        private void btnFiltreTemizle_Click(object sender, EventArgs e)
        {
            foreach (BaseRow r in vgc.Rows)
                vgc.SetCellValue(r, 0, null);
        }

        private void btnGetir_Click(object sender, EventArgs e)
        {
            GetPOs();
            tabAna.SelectedTabPage = tpPO;
        }

        private void CreateSearchPanel()
        {
            vgc.Rows.AddRange(new BaseRow[] {
                AddItem(vgc,"Durum", typeof(string), riGenel),
                AddItem(vgc,"PODurumId", typeof(int), RI(Rp.PODurum)),

                AddItem(vgc,"TalepTipiId", typeof(int), RI(Rp.TalepTipi)),
                AddItem(vgc,"UserId", typeof(int), RI(Rp.V_User)),
                AddItem(vgc,"POId", typeof(int)),
                AddItem(vgc,"POLinesId", typeof(int)),
                AddItem(vgc,"POSipId", typeof(int)),
                AddItem(vgc,"ProductId", typeof(int), RI(Rp.V_Kumas)),
                AddItem(vgc,"KstCategoryId", typeof(int), RI(Rp.KstCategory)),
                AddItem(vgc,"KstCategory2Id", typeof(int), RI(Rp.KstCategory2)),

                AddItem(vgc,"VendorId", typeof(int), RI(Rp.Vendor)),
                AddItem(vgc,"BrandId", typeof(int), RI(Rp.Brand)),
                AddItem(vgc,"SezonId", typeof(int), RI(Rp.Sezon)),
                AddItem(vgc,"OrderRef", typeof(string)),
                AddItem(vgc,"Notes", typeof(string))
            });

            vgc.Rows.GetRowByFieldName("Notes", true).Height = 60;
            vgc.Rows.GetRowByFieldName("KstCategoryId", true).Properties.Caption = "Kategori1";
            vgc.Rows.GetRowByFieldName("KstCategory2Id", true).Properties.Caption = "Kategori2";
            //vgc.Rows.GetRowByFieldName("UserId", true).Properties.Caption = "TalebiAçan";

            vgc.OptionsBehavior.UseEnterAsTab = true;
            vgc.LayoutStyle = DevExpress.XtraVerticalGrid.LayoutViewStyle.SingleRecordView;
            vgc.CustomDrawRowHeaderCell += new CustomDrawRowHeaderCellEventHandler(vgc_CustomDrawRowHeaderCell);
            vgc.Appearance.RowHeaderPanel.BackColor = Color.LightBlue;

            if (POId.ToInt() > 0)
                vgc.SetCellValue(vgc.Rows["POId"], 0, POId);

            vgc.SetCellValue(vgc.Rows["Durum"], 0, "AÇIK");
            vgc.FocusedRow = vgc.Rows["Durum"];
            vgc.BestFit();
        }

        private object GetFilterValue(string FieldName)
        {
            return vgc.GetCellValue(vgc.Rows[FieldName], vgc.FocusedRecord);
        }
        #endregion

        private DialogResult SaveChanges()
        {
            gvPOLines.EndEditing();
            gvAyrimlar.EndEditing();
            gvPOSip.EndEditing();

            bool hasChanges = ds.PO.HasChanged()
                    || ds.POLines.HasChanged()
                    || ds.POSip.HasChanged()
                    || ds.Ayrimlar.HasChanged();

            if (hasChanges)
            {
                DialogResult dr = XtraMessageBox.Show("Sipariş formunda yaptığınız değişiklikler var. Kaydetmek ister misiniz? \r\n\r\n\r\n <b>Evet:</b> Kaydet, devam et \r\n\r\n <b>Hayır:</b> Kaydetme, devam et \r\n\r\n <b>İptal:</b> İşlem yapma \r\n ", "Kaydet", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, DevExpress.Utils.DefaultBoolean.True);
                if (dr == System.Windows.Forms.DialogResult.Yes)
                {
                    btnKaydet.PerformClick();
                    return DialogResult.OK;
                }
                else
                    return dr;
            }

            return DialogResult.OK;
        }

        private void BestFit()
        {
            gvPO.BestFitColumns();
            gvPO.Columns["Notes"].Width = gvPO.Columns["AyrimReferansi"].Width = 180;

            gvPOLines.BestFitColumns();
            gvAyrimlar.BestFitColumns();
            gvPOSip.BestFitColumns();

            foreach (BandedGridColumn gc in gvPOLines.Columns)
                if (gc.Caption.ToLower().Contains("tarih"))
                    gc.Width = 80;
                else if (gc.Caption.ToLower().Contains("metraj"))
                    gc.Width = 70;

            gvPOLines.Columns["SKTeknikOzellik"].Width = 200;

            Notify("Done.");
        }
        private void ClearTables()
        {
            ds.POLines.Clear();
            ds.Ayrimlar.Clear();
            ds.xPOStok.Clear();
            ds.POSip.Clear();
            ds.Product.Clear();
        }

        #region Seçili satır işlemleri



        //TODO: Tamamlanmalı
        private void IdleTopAyir(object sender, EventArgs e)
        {
            //    List<int> productIds = new List<int>();
            //    int[] selectedRows = gvPOLines.GetSelectedRows();
            //    foreach (int rowHandle in selectedRows)
            //    {
            //        int productId = gvPOLines.GetRowCellValue(rowHandle, "ProductId").ToInt(-1);
            //        if (productId > 0)
            //            productIds.Add(productId);
            //    }
            //    if (productIds.Count > 0)
            //    {
            //        DepoStok ds = new DepoStok(productIds);
            //        ds.WindowState = FormWindowState.Maximized;
            //        ds.ShowDialog();
            //    }
            //    else
            //        XtraMessageBox.Show("Depo kontrolü yapabilmek için Artikel belirlenmiş olmalı.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);


            //    //int poLinesId = gvPOLines.GetFocusedRowCellValue("POLinesId").ToInt(-1);
            //    //decimal qtyId = gvPOLines.GetFocusedRowCellValue("IdleQty").ToInt(-1);

            //    //if (qtyId < 1)
            //    //    throw new ApplicationException("Seçtiğiniz artikele ait IDLE top yok !");

            //    //string sheetName = gvPOLines.GetFocusedRowCellDisplayText("ProductId");
            //    //byte[] imageBytes = (byte[])gvPOLines.GetFocusedRowCellValue("Scan");
            //    //using (Ayir ayir = new Ayir(poLinesId, sheetName, imageBytes))
            //    //{
            //    //    if (ayir.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            //    //    {
            //    //        foreach (DataRow dr in ayir.Result.Rows)
            //    //        {
            //    //            ds.Ayrimlar.FindByAyrimlarId(dr["AyrimId"].ToInt(-1)).QtyRevised = dr["QtyNew"].ToDecimal(-1);
            //    //        }
            //    //    }
            //    //}

            //    //btnKaydet.PerformClick();
        }



        private void POSil(object sender, EventArgs e)
        {
            if (KayitOnay() == System.Windows.Forms.DialogResult.Yes)
            {
                string idx = gvPO.GetSelectedValues("POId");

                btnKaydet.PerformClick();
                DataRow[] drSelected = ds.PO.Select("POId in (" + idx + ")");

                foreach (string id in idx.Split(','))
                {
                    int poId = id.ToInt(-1);

                    //if (isProd)
                    //    ExecuteNonQuery("SendMailForPO", poId, "PO Silme");

                    string message = ExecuteDataTable("PODeletePO", poId).Rows[0][0].ToStr();
                    if (message.StartsWith("HATA"))
                    {
                        ShowErrorMessage(message);
                        return;
                    }
                }

                btnGuncelle.PerformClick();
                ShowInfoMessage("Seçili satırlar silindi.");
            }
        }

        public DialogResult KayitOnay()
        {
            bool hasChanges = ds.PO.HasChanged()
                    || ds.POLines.HasChanged()
                    || ds.POSip.HasChanged()
                    || ds.Ayrimlar.HasChanged();

            if (hasChanges)
                return XtraMessageBox.Show("Bu işleme devam edebilmek için tüm değişiklikler kaydedilecek. Devam etmek istiyor musunuz? ", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            else
                return DialogResult.Yes;
        }


        #endregion

        #region MenuItems
        private void btnKaydet_ItemClick(object sender, ItemClickEventArgs e)
        {
            ValidateValues();

            gvPOLines.EndEditing();
            gvAyrimlar.EndEditing();
            gvPOSip.EndEditing();

            try
            {
                int counter = 0;

                DataRow[] sirali = ds.POLines.Select("", "SiraNo2");
                foreach (DataRow dr in sirali)
                {
                    if (dr.RowState == DataRowState.Deleted)
                        continue;

                    counter++;
                    if (dr["SiraNo"].ToInt() != counter)
                        dr["SiraNo"] = counter;
                }

                SetExpressions(false);
                Save();

                ExecuteNonQuery("UpdateHoldForSet");

                BestFit();

                if (ytk(171))
                    if (ds.POLines.Select("VendorId in (72,117)").Length > 0)
                    {
                        ExecuteNonQuery("UpdateHLNos", POId);
                        btnGuncelle.PerformClick();
                    }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                SetExpressions(true);
            }
        }

        private void btnGuncelle_ItemClick(object sender, ItemClickEventArgs e)
        {
            if (SaveChanges() != DialogResult.Cancel)
                GetPODetail(POId);
        }

        private void btnAyrim_ItemClick(object sender, ItemClickEventArgs e)
        {
            if (KayitOnay() == System.Windows.Forms.DialogResult.Yes)
            {

                btnKaydet.PerformClick();

                using (AyrimTalep at = new AyrimTalep(POId))
                    at.ShowDialog();

                btnGuncelle.PerformClick();
            }
        }
        #endregion

        private void bbiKoddan_ItemClick(object sender, ItemClickEventArgs e)
        {
            int customerId = -1;

            //TODO Eklenecek !!!
            //if (chkKCustomer.Checked)
            //    customerId = gleKCustomer.EditValue.ToInt(-1);
            //else
            {
                DataTable dt = ds.POLines.DefaultView.ToTable(true, "KCustomerId");
                DataRow[] drs = dt.Select("isnull(KCustomerId,-1) <> -1");

                if (drs.Length == 1)
                    customerId = drs[0][0].ToInt(-1);
            }

            using (KodIleArtikelAra artikelAra = new KodIleArtikelAra(customerId))
            {
                artikelAra.ArticleSelected += rpt_ArticleSelected;
                if (artikelAra.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    gvPOLines.BestFitColumns();
            }
        }


        private void rpt_ArticleSelected(int ProductId)
        {
            DataTable source = ds.POLines;

            if (ds.POLines.Select("ProductId=" + ProductId).Length == 0)
            {
                MyData.POLinesRow pol = ds.POLines.NewPOLinesRow();
                pol.POId = POId;
                pol.ProductId = ProductId;

                ds.POLines.AddPOLinesRow(pol);
            }
        }

        private void bbiOnceki_ItemClick(object sender, ItemClickEventArgs e)
        {
            using (Repete rpt = new Repete())
            {
                if (rpt.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    foreach (DataRow drSelected in rpt.SelectedRows)
                    {
                        int productId = drSelected["ProductId"].ToInt(-1);
                        if (ds.POLines.Select("ProductId=" + productId).Length == 0)
                        {
                            MyData.POLinesRow pol = ds.POLines.NewPOLinesRow();
                            pol.ProductId = productId;
                            pol.POId = POId;


                            if (drSelected["HLNo"].ToStr() != "")
                            {
                                pol.HLNo = drSelected["HLNo"].ToStr();
                            }

                            // Taşınmasını istediğimiz diğer sütunlar eklenebilir.
                            // ...
                            // ...

                            ds.POLines.AddPOLinesRow(pol);
                        }
                    }
                    gvPOLines.BestFitColumns();
                }
            }
        }

        //private void btnKonfirmasyon_ItemClick(object sender, ItemClickEventArgs e)
        //{
        //    AppSession.MainForm.ShowMdiChildForm(typeof(KonfirmasyonBase), POId);
        //}



        private void btnPOLinesSil_ItemClick(object sender, EventArgs e)
        {
            DialogResult dr = XtraMessageBox.Show("Seçili satırlardan durumu 'Yeni' olanlar silenecek. Emin misiniz?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr == System.Windows.Forms.DialogResult.No)
                return;

            gvPOLines.DeleteSelectedRows();

            /*


            List<int> productIds = new List<int>();
            int[] selectedRows = gvPOLines.GetSelectedRows();
            List<int> polinesIds = new List<int>();

            foreach (int rowHandle in selectedRows)
            {
                int polinesId = gvPOLines.GetRowCellValue(rowHandle, "POLinesId").ToInt(-1);
                int poDurumId = gvPOLines.GetRowCellValue(rowHandle, "PODurumId").ToInt(-1);

                if (poDurumId == 1)
                    polinesIds.Add(polinesId);
            }

            foreach (int i in polinesIds)
            {
                ds.POLines.Select("POLinesId=" + i.ToStr())[0].Delete();


                DataRow[] ayrimlar = ds.Ayrimlar.Select("POLinesId=" + i.ToStr());
                for (int j = 0; j < ayrimlar.Length; j++)
                    ayrimlar[j].Delete();
            }

            if (ds.PO.FindByPOId(POId).UserId != WhoAmI)
                if (isProd)
                    ExecuteNonQuery("SendMailForPO", POId, "PO Satırı Silme");
             */
        }


        private void btnSetDurum_Acik(object sender, EventArgs e)
        {
            SetDurum(1);
        }
        private void btnSetDurum_Kapali(object sender, EventArgs e)
        {
            SetDurum(2);
        }
        private void btnSetDurum_Iptal(object sender, EventArgs e)
        {
            SetDurum(3);
        }

        private void SetDurum(int stGenelId)
        {
            string idx = gvPOLines.GetSelectedValues("POLinesId");
            DataRow[] drSelected = ds.POLines.Select("POLinesId in (" + idx + ")");

            if (KayitOnay() == System.Windows.Forms.DialogResult.Yes)
                this.Cursor = Cursors.WaitCursor;
            else
                return;

            foreach (DataRow dr in drSelected)
            {
                int poLinesId = dr["POLinesId"].ToInt();
                MyData.POLinesRow drPOLines = ds.POLines.FindByPOLinesId(poLinesId);
                drPOLines.stGenelId = stGenelId;
            }

            if (isProduction)
                ExecuteNonQuery("SendMailForPO", POId, "PO Satırı Durum Güncelleme:" + AppSession.Lookups.stGenel.FindBystGenelId(stGenelId).Name);

            btnKaydet.PerformClick();
            this.Cursor = Cursors.Default;
        }

        private void btnStandartTara_ItemClick(object sender, EventArgs e)
        {
            Scan(false);
        }

        private void btnBuyukTara_ItemClick(object sender, EventArgs e)
        {
            Scan(true);
        }

        private void btnUreticiFoyOnizleme_ItemClick(object sender, EventArgs e)
        {
            UreticiFoyuOlustur(true);
        }

        private void btnUreticiSipOlustur_ItemClick(object sender, EventArgs e)
        {
            UreticiFoyuOlustur(false);
        }

        private void HLVer(object sender, EventArgs e)
        {
            gvPOLines.EndEditing();
            string str = gvPOLines.GetSelectedValues("POLinesId");
            btnKaydet.PerformClick();
            ExecuteNonQuery("UpdHLVer", str);
            Notify("Kaydedildi.");
        }

        private void HLAl(object sender, EventArgs e)
        {
            gvPOLines.EndEditing();
            string str = gvPOLines.GetSelectedValues("POLinesId");
            //btnKaydet.PerformClick();
            DataTable dt = ExecuteDataTable("GetHLAl", str);
            foreach (DataRow r in dt.Rows)
                gvPOLines.SetRowCellValue(gvPOLines.LocateByValue("POLinesId", r["POLinesId"]), gvPOLines.Columns["HLNo"], r["HLNo"]);

            Notify("Alındı.");
        }

        private void btnUreticiSipGeriCek_ItemClick(object sender, EventArgs e)
        {
            if (KayitOnay() == System.Windows.Forms.DialogResult.Yes)
            {
                string idx = gvPOLines.GetSelectedValues("POLinesId");
                DataRow[] drSelected = ds.POLines.Select("POLinesId in (" + idx + ") AND PODurumId > 5");
                if (drSelected.Length > 0)
                    ShowErrorMessage("Bu işlem, gelen kumaşlar için yapılamaz.");
                else
                {
                    btnKaydet.PerformClick();
                    ExecuteNonQuery("POSiparisiGeriCek", idx);
                    if (isProduction)
                        ExecuteNonQuery("SendMailForPO", POId, "PO Geri Çekme");
                    btnGuncelle.PerformClick();
                    Notify("Seçili satırların siparişi geri çekildi.");
                }
            }
        }

        private void btnOnay_ItemClick(object sender, EventArgs e)
        {
            if (KayitOnay() == System.Windows.Forms.DialogResult.Yes)
            {
                string idx = gvPOLines.GetSelectedValues("POLinesId");
                DataRow[] drSelected = ds.POLines.Select("PODurumId in (2) and POLinesId in (" + idx + ")");

                if (drSelected.Length == 0)
                    throw new ApplicationException("Sadece föy oluşturulmuş satırlar kabul edilebilir !");

                foreach (string id in idx.Split(','))
                {
                    MyData.POLinesRow drPOLines = ds.POLines.FindByPOLinesId(id.ToInt(-1));

                    drPOLines.PODurumId = 3;
                    drPOLines.KabulTarihi = DateTime.Now;
                    drPOLines.SetRedSebebiNull();
                }

                btnKaydet.PerformClick();
                if (isProduction)
                    ExecuteNonQuery("SendMailForPO", POId, "PO Satırı Onay");
            }
        }

        private void btnReddet_ItemClick(object sender, EventArgs e)
        {
            if (KayitOnay() == System.Windows.Forms.DialogResult.Yes)
            {
                string idx = gvPOLines.GetSelectedValues("POLinesId");
                DataRow[] drSelected = ds.POLines.Select("PODurumId in (1,2,3) and POLinesId in (" + idx + ")");

                if (drSelected.Length == 0)
                    throw new ApplicationException("Sadece sipariş oluşturulmamış talepler geri gönderilebilir !");

                RedSebebi rs = new RedSebebi();
                DialogResult dr = rs.ShowDialog();
                foreach (string id in idx.Split(','))
                {
                    if (dr == DialogResult.OK)
                    {
                        MyData.POLinesRow drPOLines = ds.POLines.FindByPOLinesId(id.ToInt(-1));
                        drPOLines.PODurumId = 1;
                        drPOLines.RedSebebi = rs.Sebep;
                    }
                }

                btnKaydet.PerformClick();
                if (isProduction)
                    ExecuteNonQuery("SendMailForPO", POId, "PO Satırı Red");
            }
        }

        private void KodSihirbazi_ItemClick(object sender, EventArgs e)
        {
            gvPOLines.EndEditing();

            List<POKodSihirbazi.Kod> kodlar = new List<POKodSihirbazi.Kod>();
            foreach (int rowHandle in gvPOLines.GetSelectedRows())
            {
                DataRow dr = gvPOLines.GetDataRow(rowHandle);

                POKodSihirbazi.Kod kod = new POKodSihirbazi.Kod();

                kod.ProductId = dr["ProductId"].ToInt(-1);
                kod.MusteriKodu = dr["MusteriKodu"].ToStr();
                kod.KCustomerId = dr["KCustomerId"].ToInt(-1);
                kod.UreticiKodu = dr["UreticiKodu"].ToStr();
                kod.KVendorId = dr["KVendorId"].ToInt(-1);
                kod.KaliteAciklama = dr["TalepTeknikOzellik"].ToStr();
                kod.POLinesId = dr["POLinesId"].ToInt(-1);
                kod.RowHandle = rowHandle;

                if (kod.MusteriKodu != string.Empty || kod.UreticiKodu != string.Empty)
                    kodlar.Add(kod);
            }

            if (kodlar.Count > 0)
                using (POKodSihirbazi ks = new POKodSihirbazi(kodlar))
                {
                    if (ks.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        foreach (POKodSihirbazi.Kod kod in ks.Kodlar)
                            if (kod.ProductId > 0)
                                gvPOLines.SetRowCellValue(kod.RowHandle, "ProductId", kod.ProductId);

                        btnKaydet.PerformClick();
                    }
                }
        }

        private void btnStokKartiDuzenle_ItemClick(object sender, EventArgs e)
        {
            List<string> kodlar = new List<string>();
            foreach (int rowHandle in gvPOLines.GetSelectedRows())
            {
                DataRow dr = gvPOLines.GetDataRow(rowHandle);

                if (dr["ProductId"] != DBNull.Value)
                    kodlar.Add(dr["ProductId"].ToString());
            }

            if (kodlar.Count > 0)
                using (StokKartiDuzenle ks = new StokKartiDuzenle(string.Join(";", kodlar.ToArray())))
                {
                    if (ks.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        foreach (int rowHandle in gvPOLines.GetSelectedRows())
                            if (rowHandle > -1)
                            {
                                int productId = gvPOLines.GetRowCellValue(rowHandle, "ProductId").ToInt();

                                if (productId > 0)
                                    gvPOLines.SetRowCellValue(rowHandle, "SKTeknikOzellik", GetSKTeknikOzellik(productId));
                            }

                    //string ids = gvPOLines.GetSelectedValues("POLinesId");
                    //DataTable t = ExecuteDataTable("GetTeknik", ids);
                    //foreach (DataRow r in t.Rows)
                    //    gvPOLines.SetRowCellValue(gvPOLines.LocateByValue("POLinesId", r["POLinesId"].ToInt()), "SKTeknikOzellik", r["TeknikOzellik"].ToStr());

                    //gvPOLines.RefreshData();
                }
            else
                XtraMessageBox.Show("Seçtikleriniz içinde, artikeli setlenmiş satır yok.");
        }

        private void btnTalepFoyuOnizleme_ItemClick(object sender, EventArgs e)
        {
            TalepFoyuOlustur(true);
        }

        private void btnFoyOlustur_ItemClick(object sender, EventArgs e)
        {
            TalepFoyuOlustur(false);
        }


        private void btnFiyatTeklifi_ItemClick(object sender, EventArgs e)
        {
            if (KayitOnay() == System.Windows.Forms.DialogResult.Yes)
            {
                string idx = gvPOLines.GetSelectedValues("POLinesId");

                btnKaydet.PerformClick();
                DataSet dsFoy = Session.DataManager.ExecuteDataSet("GetKumasSiparisFoy2", WhoAmI, true, idx, DBNull.Value, DBNull.Value);

                using (POOlustur po = new POOlustur(dsFoy))
                    po.ShowDialog();
            }
        }
    }
}